/**
 * http://nwiki.liveapp.cn/index.php?title=%E6%95%B0%E6%8D%AE%E9%87%87%E9%9B%86-%E6%95%B0%E6%8D%AE%E4%B8%AD%E5%BF%83#.E5.89.8D.E7.AB.AF.E6.95.B0.E6.8D.AE.E4.B8.8A.E6.8A.A5.E5.8D.8F.E8.AE.AE.E6.A1.86.E6.9E.B6
 * http://nwiki.liveapp.cn/index.php?title=%E5%89%8D%E7%AB%AF-%E5%9C%BA%E6%99%AF%E7%94%B5%E5%95%86#.E5.89.8D.E7.AB.AF.E7.9B.91.E6.8E.A7.E4.B8.8A.E6.8A.A5
 */

// 日志上报类型
const TRACK_TYPE = [
  'pageview', // 页面浏览
  'click', // 元素点击
  'shard', // 页面分享
  'error' // 错误异常
]

// 服务配置参数
let TRACK_HOST = ENV => {
  return {
    project: ENV === 'PRODUCTION' ? 'cjdslog' : 'cjds-testlog',
    store:
      ENV === 'PRODUCTION'
        ? 'cjds-pro-webtrack-phone'
        : 'cjds-test-webtrack-phone'
  }
}

// 初始化应用配置
const TRACK_CONFIG = {
  b_appid: '015-F', // 系统应用id
  b_feature: 'base', // 具体功能点
  b_featurename: 'base' // 功能说明
}

// 日志上报方法
const Track = {
  setEnv(ENV) {
    this.ENV = ENV
  },
  setConfig(config) {
    Object.assign(TRACK_CONFIG, config)
  },

  createGuid() {
    let guid = ''
    do {
      guid += Math.random()
        .toString(16)
        .replace('0.', '')
    } while (guid.length < 32)
    guid = [
      guid.substr(0, 8),
      guid.substr(8, 4),
      guid.substr(12, 4),
      guid.substr(16, 4),
      guid.substr(20, 12)
    ].join('-')
    return guid.toUpperCase()
  },

  getUUID() {
    var UUID = wx.getStorageSync('BI_UUID')
    if (!UUID) {
      UUID = this.createGuid()
      wx.setStorageSync('BI_UUID', UUID)
    }
    return UUID
  },

  getBaseData() {
    return {
      b_link: 'None', // 页面链接
      b_title: 'None', // 页面标题
      b_refer: 'None', // 上一个页面
      b_enter: 'miniprogram', // 浏览器名称
      b_appid: TRACK_CONFIG.b_appid,
      b_feature: TRACK_CONFIG.b_feature,
      b_featurename: TRACK_CONFIG.b_featurename,
      biz: {}, // 业务字段
      biz_ext: {} // 业务字段
    }
  },

  getCommonData() {
    let info = wx.getSystemInfoSync()

    return {
      p_ua: info, // 系统信息
      p_dpi: info.pixelRatio, // 设备像素比
      p_lang: info.language, // 语言类型
      p_os: info.system, // 操作系统
      p_browser: info.platform, // 客户端平台
      p_stime: Date.now(), // 统计时间
      p_uuid: this.getUUID(), // UV统计ID
      track_type: 'None' // 上报类型
    }
  },

  request(data) {
    let url = `https://${TRACK_HOST(this.ENV).project}.yunlai.cn/logstores/${
      TRACK_HOST(this.ENV).store
    }/track?APIVersion=0.6.0`
    wx.request({
      url,
      data
    })
  },

  pushBehaviorData(trackType, bizData) {
    if (TRACK_TYPE.includes(trackType) == -1) {
      return console.error('日志上报参数不正确')
    }
    this.request(
      Object.assign({}, this.getBaseData(), this.getCommonData(), bizData, {
        track_type: trackType
      })
    )
  }
}

export default Track
